import Vue from 'vue'
import Vuex from 'vuex'
// 导入获取 local 的方法
import { getToken, setToken, delToken } from '@/utils/auth'
import { getProfileApi } from '@/api'
Vue.use(Vuex)
// 创建仓库对象
const store = new Vuex.Store({
  state: {
    token: getToken() || {},
    // 保存用户信息
    userInfo: {}
  },
  mutations: {
    // 给 token 赋值
    changeToken (state, token) {
      // 保存 token
      //  保存在两个地方
      //    localstorage
      setToken(token)
      //    vuex
      state.token = token
    },
    delToken (state) {
      // 清除Loacalstrage中token
      delToken()
      // 清除vuex中token
      state.token = {}
    },
    setUserinfo (state, info) {
      state.userInfo = info
    },
    // 清除userInfo
    delUserinfo (state) {
      state.userInfo = {}
    }
  },
  actions: {
    async getUserInfo (context) {
      // context类似于实例化对象store
      // 先判断userInfo是存在
      // 不存在发起获取用户信息的请求
      if (!context.state.userInfo.name) {
        const res = await getProfileApi()
        // 将数据保存到vuex中，通过mutaotions中方法来实现
        // 即调用this.$store.commit(方法名，参数)
        context.commit('setUserinfo', res.data.data)
      }
    }
  }
})
// 暴露出仓库对象
export default store
